<?php

namespace app\admin\controller;

use app\admin\model\GoodsImages;
use think\Controller;
use think\Image;
use think\Loader;
use think\Request;
use app\admin\model\Goods as GoodsModel;
use think\Validate;

class Goods extends Base
{
    /**
     * 显示资源列表
     *
     * @return \think\Response
     */
    public function index()
    {
        //接受参数
        $params = input('keyword');
        $limit = input('limit') ? input('limit') : 5;
        //定义空数组
        $where = [];
        //判断搜索值是否存在
        if (!empty($params)) {
            //搜索值存在
            $where['g.goods_name'] = ['like', '%' . $params . '%'];
        }

        $goodsData = GoodsModel::getGoodsAll($where, $params, $limit);
        if (!empty($goodsData)) {
            //检测数据不为空的情况下进行foreach循环
            foreach ($goodsData as &$item) {
                //str_replace  三个参数  1.原来的值  2. 替换的值 3. 替换的位置
                // 例一： Apple iPhone X (A1865) 64GB 深空灰色 移动联通电信4G手机
                // 原来 Apple   红色 Apple   Apple iPhone X (A1865) 64GB 深空灰色 移动联通电信4G手机
                $item['goods_name'] = str_replace($params, '<span style="color: red">' . $params . '</span>', $item['goods_name']);
                $item['goods_pic'] = explode(',', $item['pics_logo']);
            }
        }

        //网站   手机   小程序   ios

        //API 接口   Rest

        json(['code'=>1000100,'msg'=>'成功','result'=>[]]);

        $this->assign('goods', $goodsData);
        $this->assign('params', $params);//将搜索值赋值在页面上
        return view();
    }

    /**
     * 显示创建资源表单页.
     *
     * @return \think\Response
     */
    public function create()
    {
        return view();
    }

    /**
     * 保存新建的资源
     *
     * @param \think\Request $request
     * @return \think\Response
     */
    public function save(Request $request)
    {
        //接受参数
        $post = $request->post();
        //验证参数
        $validate = Loader::validate('Goods');
        if (!$validate->scene('add')->check($post)) {
            //验证失败时走这里
            //重定向 error
            $this->error($validate->getError(), 'admin/goods/create');
        }

        // 处理商品相册
        $goodsPic = $this->uploads();
        //处理商品logo
        $file = $this->upload();
        $post['goods_logo'] = $file['goods_logo'];

        //数据处理
        // 添加商品表
        $addResult = GoodsModel::addGoodsInfo($post);
        if (!$addResult) {
            //添加失败
            //重定向 error
            $this->error('添加失败', 'admin/goods/create');
        }
        // 添加商品相册
        $addGoodsPicData = [
            'goods_id' => $addResult['id'],
            'pics_logo' => implode(',', $goodsPic),
            'goods_thumb' => $file['goods_thumb'],
        ];
        $addPicResult = GoodsImages::addGoodsPic($addGoodsPicData);
        if (!$addPicResult) {
            //添加失败
            //重定向 error
            $this->error('添加商品失败', 'admin/goods/create');
        }

        //重定向 success
        $this->success('添加成功', 'admin/goods/index');
    }

    /**
     * 单文件上传--商品logo处理
     * @return array
     */
    private function upload()
    {
        $result = [];

        $file = request()->file('goods_logo');
        // 移动到框架应用根目录/public/uploads/ 目录下
        if ($file) {
            //文件上传的验证  文件大小、允许文件后缀、文件唯一命名
            $info = $file->validate(['size' => 1024 * 1024 * 5, 'ext' => 'jpeg,jpg,png,gif'])->move(ROOT_PATH . 'public' . DS . 'uploads');
            if ($info) {
                // 成功上传后 获取上传信息
                //拼接 /uploads/20160820/42a79759f284b767dfcb2a0197904287.jpg
                $filePath = DS . 'uploads' . DS . $info->getSaveName();  //拼写商品logo路径

                //生成缩略图
                $thumbDir = 'thumb' . DS . date('Ymd');
                //如果目录地址不存在则创建目录
                if (!is_dir($thumbDir)) {
                    //生成目录
                    mkdir($thumbDir, 0777, true);
                }

                $thumbPath = $thumbDir . DS . $info->getFilename(); //拼写缩略图路径

                $imageObj = Image::open('.' . $filePath);
                $fontPath = config('fonts');
                $width = $imageObj->text('孔祥浩111', $fontPath, 20, '#2a5caa')->save($thumbPath);

                //获取路径
                $result['goods_logo'] = $filePath;
                $result['goods_thumb'] = DS . $thumbPath;
            } else {
                // 上传失败获取错误信息  文件上传错误
                $this->error($file->getError(), 'admin/goods/create');
            }
        }

        return $result;
    }

    /**
     * 多文件上传--商品相册处理
     * @return array
     */
    private function uploads()
    {
        $data = [];

        $files = request()->file('goods_pics');
        if ($files) {
            //文件上传的验证  文件大小、允许文件后缀、文件唯一命名
            foreach ($files as $value) {
                // 移动到框架应用根目录/public/uploads/ 目录下
                $info = $value->validate(['size' => 1024 * 1024 * 5, 'ext' => 'jpeg,jpg,png,gif'])->move(ROOT_PATH . 'public' . DS . 'uploads');
                if ($info) {
                    // 成功上传后 获取上传信息
                    //拼接 /uploads/20160820/42a79759f284b767dfcb2a0197904287.jpg
                    $filePath = DS . 'uploads' . DS . $info->getSaveName();
                    $data[] = $filePath;
                } else {
                    // 上传失败获取错误信息  文件上传错误
                    $this->error($value->getError(), 'admin/goods/create');
                }
            }
        }

        return $data;
    }

    /**
     * 显示指定的资源
     *
     * @param int $id
     * @return \think\Response
     */
    public function read($id)
    {
        //接受参数
        //验证参数
        if (!intval($id)) {//intval 成功 1 失败 0
            //失败重定向
            $this->error('参数不正确', 'admin/goods/index');
        }

        //拼写where条件
        $where = [
            'id' => $id
        ];
        //查询数据
        $goodsInfo = GoodsModel::getGoodsInfo($where);

        //添加日志
        //user_id , '商品详情'
        //处理数据
        $this->assign('goodsInfo', $goodsInfo);
        //返回数据
        return view();
    }

    /**
     * 显示编辑资源表单页.
     *
     * @param int $id
     * @return \think\Response
     */
    public function edit($id)
    {
        // 验证参数
        if (!intval($id)) { //intval  string 60   intval  int 60   string asdasda   intval  int 0
            $this->error('参数不正确', 'admin/goods/index');
        }
        //拼写where
        $where = [
            'id' => $id
        ];
        $goodsInfo = GoodsModel::getGoodsInfo($where);

        $this->assign('goodsInfo', $goodsInfo);
        return view();
    }

    /**
     * 保存更新的资源
     *
     * @param \think\Request $request
     * @return \think\Response
     */
    public function update(Request $request)
    {
        //接受参数
        $post = $request->post();
        $id = $post['id'];

        //验证参数
        $validate = Loader::validate('Goods');
        if (!$validate->scene('edit')->check($post)) {
            //验证失败时走这里
            //重定向 error
            $this->error($validate->getError(), 'admin/goods/create');
        }
        //处理文件上传
        // 获取表单上传文件 例如上传了001.jpg
        $file = request()->file('goods_logo');
        // 移动到框架应用根目录/public/uploads/ 目录下
        if ($file) {
            //文件上传的验证  文件大小、允许文件后缀、文件唯一命名
            $info = $file->validate(['size' => 1024 * 1024 * 5, 'ext' => 'jpeg,jpg,png,gif'])->move(ROOT_PATH . 'public' . DS . 'uploads');
            if ($info) {
                // 成功上传后 获取上传信息
                //拼接 /uploads/20160820/42a79759f284b767dfcb2a0197904287.jpg
                $filePath = DS . 'uploads' . DS . $info->getSaveName();
                $post['goods_logo'] = $filePath;

            } else {
                // 上传失败获取错误信息  文件上传错误
                $this->error($file->getError(), 'admin/goods/create');
            }
        }

        //数据处理
        $addResult = GoodsModel::updateGoodsInfo($post, $id);
        if (!$addResult) {
            //修改失败
            //重定向 error
            $this->error('修改失败', 'admin/goods/create');
        }

        //重定向 success
        $this->success('修改成功', 'admin/goods/index');
    }

    /**
     * 删除指定资源
     *
     * @param int $id
     * @return \think\Response
     */
    public function delete($id)
    {
        // 接受参数
        // 验证参数
        if (!intval($id)) { //intval  string 60   intval  int 60   string asdasda   intval  int 0
            $this->error('参数不正确', 'admin/goods/index');
        }
        //拼写where
        $where = [
            'id' => $id
        ];
        $goodsInfo = GoodsModel::getGoodsInfo($where);
        // 数据处理
        if (empty($goodsInfo)) {
            $this->error('商品不存在，删除失败', 'admin/goods/index');
        }
        if ($goodsInfo['is_on_sale'] == 1) {
            $this->error('商品正在售卖，请下架再删除', 'admin/goods/index');
        }
        $result = GoodsModel::deleteGoods($id);

        // 返回数据
        if (!$result) {
            //删除失败
            //重定向 error
            $this->error('删除失败', 'admin/goods/create');
        }
        //重定向 success
        $this->success('删除成功', 'admin/goods/index');
    }

    //修改商品状态
    public function modifyGoodsStatus()
    {
        //接受参数
        $post = \request()->post();
        //验证参数 --略
        //数据库逻辑
        $upData = [
            'is_on_sale' => $post['status']
        ];
        $id = $post['id'];
        $result = GoodsModel::updateGoodsInfo($upData, $id);
        //处理数据 --略
        //返回结果
        if (!$result) {
            //修改失败
            return json(['code' => 500, 'message' => 'error', 'data' => []]);
        }
        return json(['code' => 200, 'message' => 'success', 'data' => $result]);
    }
}
